﻿using System;
using System.Collections.Generic;
using System.ServiceModel;
using System.Text;
using com.clinica.business.BE.gesliq;
using com.clinica.business.BL.interfaces.gesliq;
using com.clinica.DL.sql.gesliq;
using com.clinica.business.entities;
using System.Configuration;

namespace com.clinica.business.BL.gesliq
{
   [ServiceBehavior(Name = "OrderAtencionBL",
       Namespace = "http://com.clinica.business.BL.interfaces.gesliq",
       ConcurrencyMode = ConcurrencyMode.Multiple,
       InstanceContextMode = InstanceContextMode.PerSession,
       IncludeExceptionDetailInFaults = true)]
    public class OrdenAtencionBL : IOrdenAtencionBL
    {
        #region IOrdenAtencionBL Members

        public List<OrdenAtencionBE> ObternerOrdenesAtencion(OrdenAtencionBE request)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<OrdenAtencionBE> lstOrdAtenc = new List<OrdenAtencionBE>();
            try
            {
                decimal decTotCoseguro = 0;
                decimal decTotDeducibles = 0;
                decimal decTotPrecio = 0;
                decimal decTotDescuento = 0;
                decimal decTotIgv = 0;
                decimal decTotNeto = 0;
                decimal decPorcIGV = 0;
                ParametrosBE oparm = new ParametrosBE();
                List<ParametrosBE> lstParm = new List<ParametrosBE>();
                lstOrdAtenc = OrdenAtencionDL.ObtenerOrdernerAtencion(request);
                oparm.NombreTabla="MONIGV";
                lstParm = ParametrosDL.ObtenerTabla(oparm);

                if(lstParm.Count>=0)
                    try
                    {
                      decPorcIGV=  decimal.Parse(lstParm[0].DescripcionCorta.Trim()) / decimal.Parse("100");
                    }
                    catch (Exception)
                    {
                        decPorcIGV = decimal.Parse(ConfigurationManager.AppSettings.Get("IGV"));
                    }
                foreach (OrdenAtencionBE item in lstOrdAtenc)
                {
                    if (item.FechaCorte != null)
                        item.FechaCorteVista = item.FechaCorte.ToString("dd/MM/yyyy").Substring(0, 10);
                    decTotCoseguro =decTotCoseguro + item.CoSeguro;
                    decTotDeducibles = decTotDeducibles + item.Deducible;
                    decTotPrecio = decTotPrecio + item.Precio;
                    decTotDescuento = decTotDescuento + item.Descuento;           
                }
                decTotIgv = (decTotPrecio - decTotDescuento) * decPorcIGV;
                decTotNeto = decTotPrecio - decTotDescuento + decTotIgv;
                foreach (OrdenAtencionBE item2 in lstOrdAtenc)
                {
                    item2.TotalBruto = (decTotPrecio - decTotDescuento);
                    item2.Totalcoseguro = decTotCoseguro;
                    item2.TotalDeducibles = decTotDeducibles;
                    item2.TotalNeto = decTotNeto;
                    item2.TotalIgv = decTotIgv;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
                //new ErrorSGC(1,ex.Message)
            }

            return lstOrdAtenc;
        }

        public List<OrdenAtencionBE> RecalcularOrdenesAtencion(OrdenAtencionBE request, int intNum, int intTipLiq)
        {
            /****************************************************************************************
             * Sistema    : Sistema de Gestión de Clinica
             * Modulo     : Facturación y Presupuestos
             * Descripción: 
             * Autor      : JPEREZ
             * Fecha      : 2011-06-01
             ****************************************************************************************/

            List<OrdenAtencionBE> lstOrdAtenc = new List<OrdenAtencionBE>();
            try
            {
                decimal decTotCoseguro = 0;
                decimal decTotDeducibles = 0;
                decimal decTotPrecio = 0;
                decimal decTotDescuento = 0;
                decimal decTotIgv = 0;
                decimal decTotNeto = 0;
                decimal decPorcIGV = 0;
                ParametrosBE oparm = new ParametrosBE();
                List<ParametrosBE> lstParm = new List<ParametrosBE>();
                lstOrdAtenc = OrdenAtencionDL.RecalcularOrdernerAtencion(request, intNum,intTipLiq);
                oparm.NombreTabla = "MONIGV";
                lstParm = ParametrosDL.ObtenerTabla(oparm);

                if (lstParm.Count >= 0)
                    try
                    {
                        decPorcIGV = decimal.Parse(lstParm[0].DescripcionCorta.Trim()) / decimal.Parse("100");
                    }
                    catch (Exception)
                    {
                        decPorcIGV = decimal.Parse(ConfigurationManager.AppSettings.Get("IGV"));
                    }
                foreach (OrdenAtencionBE item in lstOrdAtenc)
                {
                    if (item.FechaCorte != null)
                        item.FechaCorteVista = item.FechaCorte.ToString("dd/MM/yyyy").Substring(0, 10);
                    decTotCoseguro = decTotCoseguro + item.CoSeguro;
                    decTotDeducibles = decTotDeducibles + item.Deducible;
                    decTotPrecio = decTotPrecio + item.Precio;
                    decTotDescuento = decTotDescuento + item.Descuento;
                }
                decTotIgv = (decTotPrecio - decTotDescuento) * decPorcIGV;
                decTotNeto = decTotPrecio - decTotDescuento + decTotIgv;
                foreach (OrdenAtencionBE item2 in lstOrdAtenc)
                {
                    item2.TotalBruto = (decTotPrecio - decTotDescuento);
                    item2.Totalcoseguro = decTotCoseguro;
                    item2.TotalDeducibles = decTotDeducibles;
                    item2.TotalNeto = decTotNeto;
                    item2.TotalIgv = decTotIgv;
                }
            }
            catch (Exception ex)
            {
                FaultReason err = new FaultReason(ex.Message);
                throw new FaultException(err);
                //new ErrorSGC(1,ex.Message)
            }

            return lstOrdAtenc;
        }

        #endregion

       
    }
}
